#pragma once
#include <vector>
#include <string>

namespace kryptos { namespace cryptography {

class SymmetricKey
{
public:

    SymmetricKey(bool reuseWhenFinished=false);

    virtual ~SymmetricKey();

    virtual bool isValid()=0;

    virtual std::vector<char> nextBytes(int len)=0;

    virtual void setOffset(unsigned long long len);
    virtual void goBack   (unsigned long long len);
    virtual void goForward(unsigned long long len);

    virtual void reset();

    std::string        id();
    unsigned long long offset();
    unsigned long long size();

protected:

    bool               m_reuse;
    unsigned long long m_offset, m_size;
    std::string        m_id;
};

}}
